﻿using System;
using System.Collections.Generic;
using Telerik.Sitefinity.Social.Contracts;
using Telerik.Sitefinity.Social.Enumerations;

namespace Telerik.Sitefinity.Social.Model
{
    /// <summary>
    /// Represents the profile of a person
    /// </summary>
    public class Profile : IProfile
    {
        /// <summary>
        /// Gets or sets the gender.
        /// </summary>
        /// <value>The gender.</value>
        public Gender Gender
        {
            get { return this.gender; }
            set { this.gender = value; }
        }

        /// <summary>
        /// Gets or sets the birthday.
        /// </summary>
        /// <value>The birthday.</value>
        public DateTime Birthday
        {
            get { return this.birthday; }
            set { this.birthday = value; }
        }

        /// <summary>
        /// Gets or sets the hometown.
        /// </summary>
        /// <value>The hometown.</value>
        public string Hometown
        {
            get { return this.hometown; }
            set { this.hometown = value; }
        }

        /// <summary>
        /// Gets or sets the home neighbourhood.
        /// </summary>
        /// <value>The home neighbourhood.</value>
        public string HomeNeighbourhood
        {
            get { return this.homeNeighbourhood; }
            set { this.homeNeighbourhood = value; }
        }

        /// <summary>
        /// Gets or sets the type of the relationship.
        /// </summary>
        /// <value>The type of the relationship.</value>
        public Relationship RelationshipType
        {
            get { return this.relationshipType; }
            set { this.relationshipType = value; }
        }

        /// <summary>
        /// Gets or sets the interested in.
        /// </summary>
        /// <value>The interested in.</value>
        public Gender InterestedIn
        {
            get { return this.interestedIn; }
            set { this.interestedIn = value; }
        }

        /// <summary>
        /// Gets or sets the political views.
        /// </summary>
        /// <value>The political views.</value>
        public string PoliticalViews
        {
            get { return this.politicalViews; }
            set { this.politicalViews = value; }
        }

        /// <summary>
        /// Gets or sets the religious views.
        /// </summary>
        /// <value>The religious views.</value>
        public string ReligiousViews
        {
            get { return this.religiousViews; }
            set { this.religiousViews = value; }
        }

        /// <summary>
        /// Gets or sets the activities.
        /// </summary>
        /// <value>The activities.</value>
        public string Activities
        {
            get { return this.activities; }
            set { this.activities = value; }
        }

        /// <summary>
        /// Gets or sets the interests.
        /// </summary>
        /// <value>The interests.</value>
        public string Interests
        {
            get { return this.interests; }
            set { this.interests = value; }
        }

        /// <summary>
        /// Gets or sets the favourite music.
        /// </summary>
        /// <value>The favourite music.</value>
        public string FavouriteMusic
        {
            get { return this.favouriteMusic; }
            set { this.favouriteMusic = value; }
        }

        /// <summary>
        /// Gets or sets the favourite tv shows.
        /// </summary>
        /// <value>The favourite tv shows.</value>
        public string FavouriteTvShows
        {
            get { return this.favouriteTvShows; }
            set { this.favouriteTvShows = value; }
        }

        /// <summary>
        /// Gets or sets the favourite movies.
        /// </summary>
        /// <value>The favourite movies.</value>
        public string FavouriteMovies
        {
            get { return this.favouriteMovies; }
            set { this.favouriteMovies = value; }
        }

        /// <summary>
        /// Gets or sets the favourite books.
        /// </summary>
        /// <value>The favourite books.</value>
        public string FavouriteBooks
        {
            get { return this.favouriteBooks; }
            set { this.favouriteBooks = value; }
        }

        /// <summary>
        /// Gets or sets the favourite quotations.
        /// </summary>
        /// <value>The favourite quotations.</value>
        public string FavouriteQuotations
        {
            get { return this.favouriteQuotations; }
            set { this.favouriteQuotations = value; }
        }

        /// <summary>
        /// Gets or sets the about me.
        /// </summary>
        /// <value>The about me.</value>
        public string AboutMe
        {
            get { return this.aboutMe; }
            set { this.aboutMe = value; }
        }

        /// <summary>
        /// Gets the emails.
        /// </summary>
        /// <value>The emails.</value>
        public IList<string> Emails
        {
            get
            {
                if(this.emails == null)
                    this.emails = new List<string>();
                return this.emails;
            }
        }

        /// <summary>
        /// Gets the IM accounts.
        /// </summary>
        /// <value>The IM accounts.</value>
        public IDictionary<string, IMClients> IMAccounts
        {
            get
            {
                if(this.imAccounts == null)
                    this.imAccounts = new Dictionary<string, IMClients>();
                return this.imAccounts;
            }
        }

        /// <summary>
        /// Gets or sets the mobile phone.
        /// </summary>
        /// <value>The mobile phone.</value>
        public string MobilePhone
        {
            get { return this.mobilePhone; }
            set { this.mobilePhone = value; }
        }

        /// <summary>
        /// Gets or sets the land phone.
        /// </summary>
        /// <value>The land phone.</value>
        public string LandPhone
        {
            get { return this.landPhone; }
            set { this.landPhone = value; }
        }

        /// <summary>
        /// Gets or sets the address.
        /// </summary>
        /// <value>The address.</value>
        public string Address
        {
            get { return this.address; }
            set { this.address = value; }
        }

        /// <summary>
        /// Gets or sets the city town.
        /// </summary>
        /// <value>The city town.</value>
        public string CityTown
        {
            get { return this.cityTown; }
            set { this.cityTown = value; }
        }

        /// <summary>
        /// Gets or sets the neighbourhood.
        /// </summary>
        /// <value>The neighbourhood.</value>
        public string Neighbourhood
        {
            get { return this.neighbourhood; }
            set { this.neighbourhood = value; }
        }

        /// <summary>
        /// Gets or sets the zip.
        /// </summary>
        /// <value>The zip.</value>
        public string Zip
        {
            get { return this.zip; }
            set { this.zip = value; }
        }

        /// <summary>
        /// Gets or sets the website.
        /// </summary>
        /// <value>The website.</value>
        public string Website
        {
            get { return this.website; }
            set { this.website = value; }
        }

        /// <summary>
        /// Gets or sets the college university.
        /// </summary>
        /// <value>The college university.</value>
        public string CollegeUniversity
        {
            get { return this.collegeUniversity; }
            set { this.collegeUniversity = value; }
        }

        /// <summary>
        /// Gets or sets the class year.
        /// </summary>
        /// <value>The class year.</value>
        public int ClassYear
        {
            get { return this.classYear; }
            set { this.classYear = value; }
        }

        /// <summary>
        /// Gets or sets the college concentration.
        /// </summary>
        /// <value>The college concentration.</value>
        public string CollegeConcentration
        {
            get { return this.collegeConcentration; }
            set { this.collegeConcentration = value; }
        }

        /// <summary>
        /// Gets or sets the high school.
        /// </summary>
        /// <value>The high school.</value>
        public string HighSchool
        {
            get { return this.highSchool; }
            set { this.highSchool = value; }
        }

        /// <summary>
        /// Gets or sets the high school class year.
        /// </summary>
        /// <value>The high school class year.</value>
        public string HighSchoolClassYear
        {
            get { return this.highSchoolClassYear; }
            set { this.highSchoolClassYear = value; }
        }

        /// <summary>
        /// Gets or sets the job employer.
        /// </summary>
        /// <value>The job employer.</value>
        public string JobEmployer
        {
            get { return this.jobEmployer; }
            set { this.jobEmployer = value; }
        }

        /// <summary>
        /// Gets or sets the job position.
        /// </summary>
        /// <value>The job position.</value>
        public string JobPosition
        {
            get { return this.jobPosition; }
            set { this.jobPosition = value; }
        }

        /// <summary>
        /// Gets or sets the job description.
        /// </summary>
        /// <value>The job description.</value>
        public string JobDescription
        {
            get { return this.jobDescription; }
            set { this.jobDescription = value; }
        }

        /// <summary>
        /// Gets or sets the job city town.
        /// </summary>
        /// <value>The job city town.</value>
        public string JobCityTown
        {
            get { return this.jobCityTown; }
            set { this.jobCityTown = value; }
        }

        private Gender gender;
        private DateTime birthday;
        private string hometown;
        private string homeNeighbourhood;
        private Relationship relationshipType;
        private Gender interestedIn;
        private string politicalViews;
        private string religiousViews;
        private string activities;
        private string interests;
        private string favouriteMusic;
        private string favouriteTvShows;
        private string favouriteMovies;
        private string favouriteBooks;
        private string favouriteQuotations;
        private string aboutMe;
        private IList<string> emails;
        private IDictionary<string, IMClients> imAccounts;
        private string mobilePhone;
        private string landPhone;
        private string address;
        private string cityTown;
        private string neighbourhood;
        private string zip;
        private string website;
        private string collegeUniversity;
        private int classYear;
        private string collegeConcentration;
        private string highSchool;
        private string highSchoolClassYear;
        private string jobEmployer;
        private string jobPosition;
        private string jobDescription;
        private string jobCityTown;
    }
}
